﻿using System;

namespace 装箱和拆箱
{
    class Program
    {
        static void Main(string[] args)
        {

            /*
            因为数据类型的本质区别：值类型和引用类型
            外加一个万物皆对象：object
            存在一个局面：object可以代言值类型，如果代言值类型会出现装箱
            如果代言的是引用类型没什么，因为引用类型是先指向***地址才访问里面的值。
            为了程序的性能，所有需要避免装箱和拆箱
            装箱：将一个值类型存放在object里面，这样表示的是装箱。
            拆箱：将一个object强行转换成值类型就会发生拆箱这一个过程。
            引用类型是不会出现装箱和拆箱这一个过程的
            通过il代码能够看到：box和unbox的关键字，box代表的是装箱，而unbox代表的是拆箱
            存在的意义：Arraylist，什么类型都可以装，不管是值类型还是引用类型，在某种情况下还是很方便的。
            方便你写的代码和别人对接。
             */
            //装箱的演示
            int age = 18;//将一个int类型存放在object这个基类里面就会发生装箱过程。
            object box = age;//box :盒子，在这里做动词，标示装入盒子
            //拆箱的演示
            int unbox = (int)box;//不强行转换IDE会报错，无法将object类型隐式转换为int类型，如果使用强转会发生拆箱过程。
            //unbox:un----box, un：代表不做什么事情，box代表装入盒子，结合起来就是不装入盒子，就是拆箱。
        }
    }
}
